package com.newshub.business.mapper;

import com.newshub.business.entity.Category;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 分类Mapper接口
 */
@Mapper
public interface CategoryMapper {
    
    /**
     * 根据ID查询分类
     */
    Category selectById(@Param("id") Integer id);
    
    /**
     * 插入分类
     */
    int insert(Category category);
    
    /**
     * 根据ID删除分类
     */
    int deleteById(@Param("id") Integer id);
    
    /**
     * 根据ID更新分类
     */
    int updateById(Category category);
    
    /**
     * 根据名称查询分类
     * @param name 分类名称
     * @return 分类对象
     */
    Category selectByName(@Param("name") String name);
    
    /**
     * 查询所有分类
     * @return 分类列表
     */
    List<Category> selectAllCategories();
    
    /**
     * 批量插入分类
     * @param categories 分类列表
     * @return 插入数量
     */
    int insertBatch(@Param("categories") List<Category> categories);
    
    /**
     * 根据ID删除分类
     * @param id 分类ID
     * @return 删除数量
     */
    int deleteByIdCustom(@Param("id") Integer id);
    
    /**
     * 更新分类名称
     * @param id 分类ID
     * @param name 新名称
     * @return 更新数量
     */
    int updateNameById(@Param("id") Integer id, @Param("name") String name);

    /**
     * 根据编码查询分类
     * @param code 分类编码
     * @return 分类对象
     */
    Category selectByCode(@Param("code") String code);

    /**
     * 分页查询分类
     * @param name 分类名称（模糊查询）
     * @param code 分类编码（模糊查询）
     * @param status 状态
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 分类列表
     */
    List<Category> selectByPage(@Param("name") String name, @Param("code") String code, 
                               @Param("status") Integer status, @Param("offset") Integer offset, 
                               @Param("limit") Integer limit);

    /**
     * 统计分页查询的总数
     * @param name 分类名称（模糊查询）
     * @param code 分类编码（模糊查询）
     * @param status 状态
     * @return 总数
     */
    long countByPage(@Param("name") String name, @Param("code") String code, @Param("status") Integer status);

    /**
     * 更新分类状态
     * @param id 分类ID
     * @param status 新状态
     * @return 更新数量
     */
    int updateStatusById(@Param("id") Integer id, @Param("status") Integer status);

    /**
     * 批量删除分类
     * @param ids 分类ID列表
     * @return 删除数量
     */
    int deleteBatchByIds(@Param("ids") List<Integer> ids);

    // ==================== 统计功能 ====================
    
    /**
     * 统计各分类的新闻数量
     * @return 分类统计
     */
    List<Map<String, Object>> selectCategoryStats();
}